﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ThanNhanTao.Server.BLL;
using ThanNhanTao.Server.Entities;
using ThanNhanTao.CommonControl;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Grid;

namespace ThanNhanTao.UC
{
    public partial class ucThongKeBenhAnMainForm : UserControl
    {
        public ucThongKeBenhAnMainForm()
        {
            InitializeComponent();
            if (ThanNhanTaoGlobal.MainWindowCommon != null)
                ThanNhanTaoGlobal.MainWindowCommon.ucThongKeBenhAnMainForm = this;
            GetDanhSachThongKeBenhAn();
        }

        public void GetDanhSachThongKeBenhAn()
        {
            List<ThongKeBenhAnBenhNhanDto> dsThongKeBenhNgayLamViec = new List<ThongKeBenhAnBenhNhanDto>();                                                   
            try
            {
                DateTime ngayCu = CongTruDateTime(ThanNhanTaoGlobal.NgayLamViec, 1);
                dsThongKeBenhNgayLamViec.Add(new ThongKeBenhAnBenhNhanDto
                {
                    TongBenhCu = TongSoBenhCu(ngayCu),
                    TongBenhRa = TongSoBenhRa(ngayCu),
                    TongBenhTuVong = TongSoBenhTuVong(ngayCu),
                    TongBenhVao = TongSoBenhVao(ngayCu),
                    NgayBenhCu = ngayCu
                });
            }
            catch
            {
            }
            if (dsThongKeBenhNgayLamViec != null && dsThongKeBenhNgayLamViec.Count > 0)
            {
                lblThongBao.Content = "Ngày làm việc: " + CongTruDateTime(ThanNhanTaoGlobal.NgayLamViec, 1).ToString("dd/MM/yyyy") + " Tổng BN: "
                                                        + dsThongKeBenhNgayLamViec[0].TongBenhSoBenh.ToString();
            }
            gridThongKeBenhAn.ItemsSource = dsThongKeBenhNgayLamViec;
            gridThongKeBenhAn.RefreshData();
        }
        private int TongSoBenhVao(DateTime ngayLamViec)
        {
            DateTime ngayBatDau = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 0, 0, 0);
            DateTime ngayKetThuc = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 23, 59, 59);
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where (a.NgayVaoVien != null && a.NgayVaoVien.Value >= ngayBatDau && a.NgayVaoVien.Value <= ngayKetThuc)
                    select a).Count();
        }
        private int TongSoBenhCu(DateTime ngayLamViec)
        {
            DateTime ngayKetThuc = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 0, 0, 0);
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where (a.NgayRaVien == null && a.NgayVaoVien.Value < ngayKetThuc)
                                                || (a.NgayRaVien != null && a.NgayVaoVien.Value < ngayKetThuc
                                                                         && a.NgayRaVien.Value >= ngayKetThuc)
                    select a).Count();
        }
        private int TongSoBenhRa(DateTime ngayLamViec)
        {
            DateTime ngayBatDau = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 0, 0, 0);
            DateTime ngayKetThuc = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 23, 59, 59);
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where ((a.NgayRaVien != null && a.NgayRaVien.Value >= ngayBatDau && a.NgayRaVien.Value <= ngayKetThuc)&& a.TinhHinhTuVong==0)
                    || ((a.NgayRaVien != null && a.NgayRaVien.Value >= ngayBatDau && a.NgayRaVien.Value <= ngayKetThuc) && a.TinhHinhTuVong ==3)
                    || ((a.NgayRaVien != null && a.NgayRaVien.Value >= ngayBatDau && a.NgayRaVien.Value <= ngayKetThuc) && a.TinhHinhTuVong == 2)
                    select a).Count();
        }
        private int TongSoBenhTuVong(DateTime ngayLamViec)
        {
            DateTime ngayBatDau = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 0, 0, 0);
            DateTime ngayKetThuc = new DateTime(ngayLamViec.Year, ngayLamViec.Month, ngayLamViec.Day, 23, 59, 59);
            return (from a in ThanNhanTaoGlobal.DanhSachBenhNhan
                    where (a.TinhHinhTuVong == 1)
                    && (a.NgayRaVien != null && a.NgayRaVien.Value >= ngayBatDau && a.NgayRaVien.Value <= ngayKetThuc)
                    select a).Count();
        }

        private DateTime CongTruDateTime(DateTime ngayLamViec,int soNgay)
        {
            DateTime ketQuaNgay=new DateTime();
            TimeSpan tsngay = new TimeSpan(ngayLamViec.Ticks);
            TimeSpan tsSoNgay = new TimeSpan(soNgay, 0, 0, 0);
            ketQuaNgay = new DateTime(tsngay.Ticks-tsSoNgay.Ticks);
            return ketQuaNgay;
        }
    }

    public class ThongKeBenhAnBenhNhanDto
    {
        public int TongBenhCu{get;set;}
        public int TongBenhRa { get; set; }
        public int TongBenhVao { get; set; }
        public int TongBenhTuVong { get; set; }
        public int TongBenhConLai
        {
            get
            {
                return (TongBenhCu + TongBenhVao) - (TongBenhRa + TongBenhTuVong);
            }
        }
        public int TongBenhSoBenh
        {
            get
            {
                return (TongBenhCu + TongBenhVao);
            }
        }
        public DateTime NgayBenhCu
        {
            set;
            get;
        }
        public string TongBenhCuString
        {
            get 
            {
                return TongBenhCu.ToString() + "\n(" + NgayBenhCu.ToString("dd/MM/yyyy") + ")";
            }
        }
    }

}
